博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BBS项目
阅读量:6191 次
发布时间:2019-06-21

本文共 6936 字,大约阅读时间需要 23 分钟。

首先考虑是么数据库,如果不想使用默认数据库,使用MySQL的话,

#setingsDATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME':'bbs',        'HOST':'127.0.0.1',        'PORT':3306,        'USER':'root',        'PASSWORD':'123'    }}#__init__import pymysqlpymysql.install_as_MySQLdb()
修改settings以及__init__

创建static文件夹,并修改settings

STATICFILES_DIRS = (    os.path.join(BASE_DIR, 'static'),)#注意,一定要加逗号(  (BASE_DIR, 'static'),   )
View Code

如果要使用auth组件,继承AbstractUser,需要在settings添加

AUTH_USER_MODEL = 'blog.UserInfo'#blog是APP名,UserInfo是继承AbstractUser的表
View Code

创建表(执行数据库迁移命令)

from django.db import modelsfrom django.contrib.auth.models import AbstractUser# Create your models here.# UserInfo这个表,继承AbstractUser,因为要用auth组件class UserInfo(AbstractUser):    nid = models.AutoField(primary_key=True)    # username=models.CharField(max_length=32,unique=True)    # 该字段可以为空,为该字段设置默认值,default='123455666'    phone = models.CharField(max_length=32,null=True)    # upload_to需要传一个路径    avatar = models.FileField(upload_to='avatar/', default='/static/img/default.png')    #  一对一关联blog表,to_field如果不写,默认主键    # blog_id字段存的数据是什么?blog表的---nid这个字段    blog = models.OneToOneField(to='Blog', to_field='nid')    # user表    #     id name  blog_id    #     1  111    1    #     2  111    1class Blog(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    site_name = models.CharField(max_length=32)    theme = models.CharField(max_length=64)class Category(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    # ForeignKey跟OneToOneField的区别?    #OneToOneField unique=True    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)class Tag(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)class Article(models.Model):    nid = models.AutoField(primary_key=True)    title = models.CharField(max_length=64)    # 摘要,简单描述    desc = models.CharField(max_length=255)    # 大文本TextField()    content = models.TextField()    # 存时间类型,auto_now_add每插入一条数据,时间自动写入当前时间,    # auto_now,这条数据修改的时候,会更新成当前时间    create_time = models.DateTimeField(auto_now_add=True)    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)    category = models.ForeignKey(to='Category', to_field='nid', null=True)    # through_fields应该怎么写?    # 中介模型,手动创建第三张表    tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag'))    # 这样写,会自动创建第三张表    # tag = models.ManyToManyField(to='Tag')# 手动创建第三张表class ArticleTOTag(models.Model):    nid = models.AutoField(primary_key=True)    article = models.ForeignKey(to='Article', to_field='nid')    tag = models.ForeignKey(to='Tag', to_field='nid')    # article和tag应不应该联合唯一?    # article_id  1    # tag_id     1class Commit(models.Model):    nid = models.AutoField(primary_key=True)    user = models.ForeignKey(to='UserInfo', to_field='nid')    article = models.ForeignKey(to='Article', to_field='nid')    content = models.CharField(max_length=255)    create_time = models.DateTimeField(auto_now_add=True)    # 这样写是可以的    # parent_id=models.IntegerField()    # 自关联    # parent_id=models.ForeignKey(to='Commit',to_field='nid')    parent = models.ForeignKey(to='self', to_field='nid',null=True)class UpAndDown(models.Model):    nid = models.AutoField(primary_key=True)    user = models.ForeignKey(to='UserInfo', to_field='nid')    article = models.ForeignKey(to='Article', to_field='nid')    is_up = models.BooleanField()    class Meta:        # 写这些,只是为了不写脏数据,联合唯一        unique_together = (('user', 'article'),)
View Code

 

 

登陆界面设计

    
Title
#这里的for等于input的id,那么在点击用户名时,光标自动弹到input框中
login.html

 

from django.shortcuts import render,HttpResponsefrom PIL import Image# Create your views here.import randomfrom io import BytesIOdef login(request):    if request.method == 'GET':        return render(request,'login.html')#方式一#直接在static静态文件夹中引用图片# def get_valid_code(request):#     with open('static/img/1','rb') as f:#         data = f.read()#     return HttpResponse(data)# 方式二#自动生成图片# pip3 install Pillowdef get_random_color():# 为了随机获得图片颜色    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))def get_valid_code(request):    # new()生成一张图片    # 三个参数    # 参数一是图片模式,RGB是三原色,参数二是图片大小,前边是款宽,后边是高    #     参数三是颜色    # img=Image.new('RGB',(360,35),color='green')        方式一    # img=Image.new('RGB',(360,35),color=(0,0,255))      方式二    # img=Image.new('RGB',(360,35),color=get_random_color())   方式三# 存取方式一    # # 保存到本地    # with open('valid_code.png','wb')as f:    #     # 直接用img的save方法,参数一是文件,参数二是图片格式    #     img.save(f,'png')    # #打开文件,再返回给前端    # with open('valid_code.png','rb')as f:    #     data=f.read()    #     return HttpResponse(data)    # 存取方式二    # 将图片保存到内存中,存取快,并且解释器可以自动清理资源    img=Image.new('RGB',(360,35),color=get_random_color())    f=BytesIO()    img.save(f,'png')    data=f.getvalue() #用getvalue取值,此时会把f的内存文件中的所有内容读取出来    return HttpResponse(data)
随机验证码背景设计,无验证码版本

 

 

 

 

from django.shortcuts import render,HttpResponse from PIL import Image # Create your views here. import random from io import BytesIO def login(request): if request.method == 'GET': return render(request,'login.html') #方式一 #直接在static静态文件夹中引用图片 # def get_valid_code(request): #     with open('static/img/1','rb') as f: #         data = f.read() #     return HttpResponse(data) # 方式二 #自动生成图片 # pip3 install Pillow def get_random_color():# 为了随机获得图片颜色 return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) def get_valid_code(request): # new()生成一张图片     # 三个参数     # 参数一是图片模式,RGB是三原色,参数二是图片大小,前边是款宽,后边是高     #     参数三是颜色     # img=Image.new('RGB',(360,35),color='green')        方式一     # img=Image.new('RGB',(360,35),color=(0,0,255))      方式二     # img=Image.new('RGB',(360,35),color=get_random_color())   方式三 # 存取方式一     # # 保存到本地     # with open('valid_code.png','wb')as f:     #     # 直接用img的save方法,参数一是文件,参数二是图片格式     #     img.save(f,'png')     # #打开文件,再返回给前端     # with open('valid_code.png','rb')as f:     #     data=f.read()     #     return HttpResponse(data)     # 存取方式二     # 将图片保存到内存中,存取快,并且解释器可以自动清理资源 img=Image.new('RGB',(360,35),color=get_random_color())     f=BytesIO()     img.save(f,'png')     data=f.getvalue() #用getvalue取值,此时会把f的内存文件中的所有内容读取出来 return HttpResponse(data)

转载于:https://www.cnblogs.com/pdun/p/10824656.html

你可能感兴趣的文章
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>